package com.woniuxy.ShiroIniTest;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.env.BasicIniEnvironment;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

/**
 * @Author：向天浩
 * @Date：2022/2/22 18:57
 * @Description :使用shiro进行授权
 */

public class PermTest {
    public static void main(String[] args) {
        //使用BasicIniEnvironment读取我们的配置文件，创建该对象
        BasicIniEnvironment basicIniEnvironment = new BasicIniEnvironment("classpath:shiroini/shiro-perm.ini");

        //通过BasicIniEnvironment对象获取到securityManager
        SecurityManager securityManager = basicIniEnvironment.getSecurityManager();

        //将这个securityManager放到我们的工具类中SecurityUtils
        SecurityUtils.setSecurityManager(securityManager);

        //通过这个工具类获取到主体subject
        Subject subject = SecurityUtils.getSubject();
        //获取到账号和密码
        subject.login(new UsernamePasswordToken("root","123"));

        //通过subject判断登录认证是否成功Authenticated;认证
        System.out.println("是否认证成功"+subject.isAuthenticated());

        //获取用户名
        System.out.println(subject.getPrincipal());

        //判断登录的用户是否有某个角色使用subject.hasRole()
        System.out.println("是否有这个角色"+subject.hasRole("roles2"));
        //判断登录的用户是否有某个权限subject.isPermitted()
        System.out.println("是否有这个权限"+subject.isPermitted("user.delete"));

        //如果已经登录验证成功了
        if (subject.isAuthenticated()) {
            //就判断该登录用户是否有某个角色，或者某个权限
            if (subject.hasRole("roles2")){
                System.out.println("登录验证成功，角色权限也复合，可以继续进行其他操作");
            }
        }
    }
}
